#ifndef __SW_CAMERA_H__
#define __SW_CAMERA_H__

#include "framework/sweety.h"
#include "components/3D/sweety_3D_Math.h"
#include "tools/sweety_Input.h"

#ifndef PI
#define PI 3.14159f
#else

#endif

namespace SW
{
	class SW_API Camera
	{
	public:
						Camera();
		virtual			~Camera();
		const Mat4&		GetViewTrans() const;
		const Mat4&		GetProjectionTrans() const;

		virtual void	Update(float deltaTime) = 0;

		void			SetNear(float near);
		void			SetFar(float far);

		void			SetWidth(float width);
		void			SetHeight(float height);

		float			GetFar() const;
		float			GetNear() const;

	protected:
		virtual void	UpdateViewTrans() = 0;
		virtual void	UpdateProjectionTrans() = 0;

	protected:
		mutable Mat4	m_ViewTrans;
		mutable Mat4	m_ProjectionTrans;

		float			m_Width;
		float			m_Height;

		float			m_Near, m_Far;

	};
}

#endif